package tp.tecnicasdisenio.model.accion;

import java.util.Set;

import tp.tecnicasdisenio.dao.GrupoDaoInterface;
import tp.tecnicasdisenio.dao.MateriaDaoInterface;
import tp.tecnicasdisenio.dao.impl.jdbc.AlumnoDao;
import tp.tecnicasdisenio.model.AccionInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.Cuatrimestre;
import tp.tecnicasdisenio.model.entity.Grupo;
import tp.tecnicasdisenio.model.entity.Grupo.ClaveGrupo;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.parser.ParserAdjuntoAltaGrupo;
import tp.tecnicasdisenio.model.validador.ValidadorInterface;
import tp.tecnicasdisenio.util.FechaUtil;

public class AccionAltaGrupo implements AccionInterface{

	private ValidadorInterface validadorAltaGrupo;
	private ParserAdjuntoAltaGrupo parserAdjuntoAltaGrupo; 
	
	private GrupoDaoInterface grupoDao;
	private MateriaDaoInterface materiaDao;
	private AlumnoDao alumnoDao;
	
	@Override
	public void aplicarSobre(MailInterface mail, AutoRespondedorInterface autoRespondedor) {
		if(!validadorAltaGrupo.valido(mail, autoRespondedor)){
			return;
		}
		
		Set<String> padrones= parserAdjuntoAltaGrupo.padrones(mail);
		Materia materia= materiaDao.getPorEmail(mail.getTo().get(0));
		Cuatrimestre cuatrimestreActual= FechaUtil.getCuatrimestreActual();
		Integer nroTp= materiaDao.getUltimoNroGrupoRegistrado(materia, cuatrimestreActual) + 1;
		
		ClaveGrupo claveGrupo= new ClaveGrupo();
		claveGrupo.setMateria(materia);
		claveGrupo.setCuatrimestre(cuatrimestreActual);
		claveGrupo.setNumero(nroTp);
		
		Grupo grupoNuevo= new Grupo();
		grupoNuevo.setClaveGrupo(claveGrupo);
		grupoDao.insertar(grupoNuevo);
		for(String padron : padrones){
			Alumno alumno= alumnoDao.getPorId(padron);
			grupoDao.altaEnGrupo(grupoNuevo, alumno);
		}
		
		System.out.println(this.getClass().getSimpleName() + " aplicada.");
	}

	public ValidadorInterface getValidadorAltaGrupo() {
		return validadorAltaGrupo;
	}

	public void setValidadorAltaGrupo(ValidadorInterface validadorAltaGrupo) {
		this.validadorAltaGrupo = validadorAltaGrupo;
	}

	public ParserAdjuntoAltaGrupo getParserAdjuntoAltaGrupo() {
		return parserAdjuntoAltaGrupo;
	}

	public void setParserAdjuntoAltaGrupo(
			ParserAdjuntoAltaGrupo parserAdjuntoAltaGrupo) {
		this.parserAdjuntoAltaGrupo = parserAdjuntoAltaGrupo;
	}

	public GrupoDaoInterface getGrupoDao() {
		return grupoDao;
	}

	public void setGrupoDao(GrupoDaoInterface grupoDao) {
		this.grupoDao = grupoDao;
	}

	public MateriaDaoInterface getMateriaDao() {
		return materiaDao;
	}

	public void setMateriaDao(MateriaDaoInterface materiaDao) {
		this.materiaDao = materiaDao;
	}

	public AlumnoDao getAlumnoDao() {
		return alumnoDao;
	}

	public void setAlumnoDao(AlumnoDao alumnoDao) {
		this.alumnoDao = alumnoDao;
	}

	
}
